﻿//using System;
//using System.Collections.Generic;
//using System.Linq;
//using System.Text;
//using System.Xml;
//using HtmlAgilityPack;

//namespace SitePack
//{
//    public class SitePixiv : MoeLoader.AbstractImageSite
//    {
//        public override string SiteUrl { get { return "http://www.pixiv.net"; } }
//        public override string SiteName { get { return "www.pixiv.net"; } }
//        public override string ShortName { get { return "pixiv"; } }
//        public override string Referer { get { return "http://www.pixiv.net/"; } }

//        public override bool IsSupportCount { get { return false; } } //fixed 20
//        public override bool IsSupportScore { get { return false; } }
//        public override bool IsSupportRes { get { return false; } }
//        //public override bool IsSupportPreview { get { return true; } }
//        public override bool IsSupportTag { get { return false; } }

//        //public override System.Drawing.Point LargeImgSize { get { return new System.Drawing.Point(150, 150); } }
//        //public override System.Drawing.Point SmallImgSize { get { return new System.Drawing.Point(150, 150); } }

//        private string cookie = null;
//        private string[] user = { "", "" };
//        private string[] pass = { "", "" };
//        private Random rand = new Random();

//        /// <summary>
//        /// pixiv.net site
//        /// </summary>
//        public SitePixiv()
//        {
//        }

//        public override string GetPageString(int page, int count, string keyWord, System.Net.IWebProxy proxy)
//        {
//            if (page > 1000) throw new Exception("页码过大，若需浏览更多图片请使用关键词限定范围");
//            Login(proxy);

//            //http://www.pixiv.net/new_illust.php?p=2
//            string url = SiteUrl + "/new_illust.php?p=" + page;

//            MyWebClient web = new MyWebClient();
//            web.Proxy = proxy;
//            web.Headers["Cookie"] = cookie;
//            web.Encoding = Encoding.UTF8;

//            if (keyWord.Length > 0)
//            {
//                //http://www.pixiv.net/search.php?s_mode=s_tag&word=hatsune&order=date_d&p=2
//                url = SiteUrl + "/search.php?s_mode=s_tag&word=" + keyWord + "&order=date_d&p=" + page;
//            }

//            string pageString = web.DownloadString(url);
//            web.Dispose();

//            return pageString;
//        }

//        public override List<Img> GetImages(string pageString, System.Net.IWebProxy proxy)
//        {
//            List<Img> imgs = new List<Img>();

//            HtmlDocument doc = new HtmlDocument();
//            doc.LoadHtml(pageString);
//            //retrieve all elements via xpath
//            HtmlNodeCollection nodes = doc.DocumentNode.SelectSingleNode("//ul[@class='images autopagerize_page_element']").SelectNodes("li");
//            if (nodes == null)
//            {
//                return imgs;
//            }

//            foreach (HtmlNode imgNode in nodes)
//            {
//                try
//                {
//                    HtmlNode anode = imgNode.SelectSingleNode("a");
//                    //details will be extracted from here
//                    //eg. /member_illust.php?mode=medium&amp;illust_id=26595034
//                    string detailUrl = anode.Attributes["href"].Value.Replace("amp;", "");
//                    string previewUrl = anode.SelectSingleNode(".//img").Attributes["src"].Value;

//                    //extract id from detail url
//                    string id = detailUrl.Substring(detailUrl.LastIndexOf('=') + 1);

//                    Img img = GenerateImg(detailUrl, previewUrl, id);
//                    if (img != null) imgs.Add(img);
//                }
//                catch
//                {
//                    //int i = 0;
//                }
//            }

//            return imgs;
//        }

//        // DO NOT SUPPORT TAG HINT
//        //public override List<TagItem> GetTags(string word, System.Net.IWebProxy proxy)
//        //{
//        //    List<TagItem> re = new List<TagItem>();
//        //    return re;
//        //}

//        private Img GenerateImg(string detailUrl, string preview_url, string id)
//        {
//            int intId = int.Parse(id);

//            //convert relative url to absolute
//            if (detailUrl.StartsWith("/"))
//                detailUrl = SiteUrl + detailUrl;
//            if (preview_url.StartsWith("/"))
//                preview_url = SiteUrl + preview_url;

//            string fileUrl = preview_url.Replace("_s.", ".");
//            string sampleUrl = preview_url.Replace("_s.", "_m.");

//            //http://img76.pixiv.net/img/2a2kanacode/26595034_s.jpg
//            //http://img76.pixiv.net/img/2a2kanacode/26595034_m.jpg
//            //http://img76.pixiv.net/img/2a2kanacode/26595034.jpg

//            Img img = new Img()
//            {
//                //Date = "N/A",
//                //FileSize = file_size.ToUpper(),
//                Desc = intId + " ",
//                Id = intId,
//                JpegUrl = fileUrl,
//                OriginalUrl = fileUrl,
//                PreviewUrl = preview_url,
//                SampleUrl = sampleUrl,
//                //Score = 0,
//                //Width = width,
//                //Height = height,
//                //Tags = tags,
//            };

//            img.DownloadDetail = new DetailHandler((i, p) =>
//            {
//                //retrieve details
//                MyWebClient web = new MyWebClient();
//                web.Proxy = p;
//                web.Encoding = Encoding.UTF8;
//                web.Headers["Cookie"] = cookie;
//                web.Headers["Referer"] = Referer;
//                string page = web.DownloadString(detailUrl);

//                HtmlDocument doc = new HtmlDocument();
//                doc.LoadHtml(page);

//                //04/16/2012 17:44｜600×800｜SAI  or 04/16/2012 17:44｜600×800 or 04/19/2012 22:57｜漫画 6P｜SAI
//                string data1 = doc.DocumentNode.SelectSingleNode("//div[@class='works_data']").SelectSingleNode("p").InnerText;
//                try
//                {
//                    i.Date = data1.Substring(0, data1.IndexOf('｜')).Trim();
//                    //总点数
//                    i.Score = int.Parse(doc.DocumentNode.SelectSingleNode("//div[@id='unit']").SelectSingleNode(".//div[3]").InnerText);
//                    //i.Tags = doc.DocumentNode.SelectSingleNode("//span[@id='tags']").InnerText.Replace("　", "").Replace("*", "");
//                    //「カルタ＆わたぬき」/「えれっと」のイラスト [pixiv]
//                    i.Desc += doc.DocumentNode.SelectSingleNode("//title").InnerText.Replace("のイラスト [pixiv]", "").Replace("「", "[").Replace("」", "]");
//                }
//                catch { }
//                try
//                {
//                    int index = data1.IndexOf('｜') + 1;
//                    string dimension = data1.Substring(index).Trim();
//                    //706×1000
//                    i.Width = int.Parse(dimension.Substring(0, dimension.IndexOf('×')));
//                    i.Height = int.Parse(System.Text.RegularExpressions.Regex.Match(dimension.Substring(dimension.IndexOf('×') + 1), @"\d+").Value);
//                }
//                catch { }
//                try
//                {
//                    if (i.Width == 0 && i.Height == 0)
//                    {
//                        i.Dimension = "N/A";
//                        i.OriginalUrl = i.PreviewUrl.Replace("_s.", "_p0.");
//                        i.JpegUrl = i.OriginalUrl;
//                    }
//                }
//                catch { }
//            });

//            return img;
//        }

//        private void Login(System.Net.IWebProxy proxy)
//        {
//            if (cookie == null)
//            {
//                System.Net.HttpWebRequest req = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(SiteUrl + "/login.php");
//                req.UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)";
//                req.Proxy = proxy;
//                req.Timeout = 8000;
//                req.Method = "POST";
//                //prevent 302
//                req.AllowAutoRedirect = false;
//                //user & pass
//                int index = rand.Next(0, user.Length);
//                string data = "mode=login&pixiv_id=" + user[index] + "&pass=" + pass[index] + "&skip=1";
//                byte[] buf = Encoding.UTF8.GetBytes(data);
//                req.ContentType = "application/x-www-form-urlencoded";
//                req.ContentLength = buf.Length;
//                System.IO.Stream str = req.GetRequestStream();
//                str.Write(buf, 0, buf.Length);
//                str.Close();
//                System.Net.WebResponse rsp = req.GetResponse();

//                //HTTP 302然后返回实际地址
//                cookie = rsp.Headers.Get("Set-Cookie");
//                if (rsp.Headers.Get("Location") == null || cookie == null)
//                {
//                    throw new Exception("自动登录失败");
//                }
//                //Set-Cookie: PHPSESSID=3af0737dc5d8a27f5504a7b8fe427286; expires=Tue, 15-May-2012 10:05:39 GMT; path=/; domain=.pixiv.net
//                cookie = cookie.Substring(0, cookie.IndexOf(';'));
//                rsp.Close();
//            }
//        }
//    }
//}
